AWS Systems Manager Quick Setup に EC2 の起動・停止が実装できる Resource Scheduler が追加されました!
検証環境等で特定時間(夜間など)に利用がない Amazon EC2(以降、EC2)などの AWS リソースを停止することは、コスト削減方法の一つとして知られているものかと思います。
その実装方法もいくつか存在していて、例えば下記のような方法があります。
- Amazon EventBridge と AWS Lambda による実装
- AWS ソリューションである Instance Scheduler の利用
- サードパーティ製品の利用(弊社 Opswitch も対応!)
今回、上記に仲間入りする方法として Resource Scheduler がリリースされました。
- What's new
- ドキュメント
既に AWS Blog 内で、具体的な手順記事がありますが、自分でもやってみようと思います!
やってみた
前準備
今回 EC2 インスタンスのみを対象とする機能(2022/12/22時点)のため、EC2 を2台用意します。またタグで対象を識別するため stop-start:on
と stop-start:off
のパターンに分けて片方だけ実行されることを確認します。
Resource Scheduler 設定
それでは AWS Systems Manager(以降、SSM)で設定していきます。
Systems Manager
>>> Quick Setup
>>> Resource Scheduler
>>> 作成
を選択
対象となるタグを入力します。(候補選択ではなく完全入力)
(余談) 適切なタグが付与されていない EC2 を停止して... と思いましたがタグが必須項目になっていました。そういう用途は今まで通り Config Rules で実装するのが良いようです。
スケジュールを設定します。
ここで複数リージョンに展開したい場合は、「リージョンを選択」で対象にチェックをつけます。作成を選択します。
各リソースが作成されます。
CloudFormation で必要なリソースを作成しています。
- SSM Change Calendar
- SSM Document
- IAM Role ... etc
SSM Change Calendar を見てみると専用のカレンダーと予定が作成されています。
あとは、結果を待ちます。16:00 に停止して、17:00 に起動する想定です。
結果
AWS Config で結果を確認していきます。
- i-0c156cbd12a2d0cc1 (tag-on)
対象インスタンスのため 16:00 に StopInstances イベントが、17:00 に StartInstances が記録されています。
- i-0de9f7945e50301c8 (tag-off)
非対象インスタンスのため、当該時間帯に停止や起動に関するイベントが記録されていません。
想定した結果が得られました。ついでに SSM 側の処理結果も見てみます。
SSM Automation に結果が記録されています。SSM Change Calendar でスケジュールを管理、Automation で処理を実行しているようですね。
まとめ
EC2 の自動起動・停止が実装できる Resource Scheduler をやってみました。他リージョンや他アカウントへの展開は検証出来ていませんが、とても簡単に実装することが出来ました。設定変更も SSM Quick Setup から可能なため、管理も簡単です。利用しない時間帯のリソースを停止するのはコスト削減効果も大きいため、やっておきたい施策です。その方法の選択肢が多くあるというのは、ワークロードや組織の習熟度によって選択の幅が出るので良いですね。
現在は対象が EC2 インスタンスのみなので、他リソースも可能になるとなお嬉しいですね!
追記
hayashi.masaya さんが Organizations 環境配下での検証記事を書いてくれました!